home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Internet Info 1994 March
/
Internet Info CD-ROM (Walnut Creek) (March 1994).iso
/
networking
/
info-service
/
wais
/
ir-book-sources
/
mphf
/
pmrandom.c
< prev
next >
Wrap
C/C++ Source or Header
|
1993-04-08
|
2KB
|
83 lines
/****************************** pmrandom.h ***************************
Purpose: Implement a random-number generator package for this program.
Provenance: Written and tested by Q. Chen and E. Fox, March 1991.
Edited by S. Wartik, April 1991.
Notes: It is assumed that the C data type "int" can store
32-bit quantities.
**/
#include "pmrandom.h"
static int seed = DEFAULT_SEED; /* The seed of the random number generator. */
/*************************************************************************
setseed(int)
Returns: int
Purpose: Set the seed for the random number generator.
Plan: Uses a formula suggested by Park and Miller. See above.
Notes: None.
**/
void setseed( new_seed )
int new_seed;
{
int low, high, test;
if ( (new_seed < 1) || (new_seed > 2147483646) )
new_seed = DEFAULT_SEED;
high = new_seed / 127773; /* 127773 = 2147483647 div 16807 */
low = new_seed % 127773;
test = 16807 * low - 2836 * high; /* 2836 = 2147483647 mod 16807 */
seed = ( test > 0 ) ? test : test + 2147483647;
}
/*************************************************************************
pmrandom()
Returns: void
Purpose: Return the next random number in the sequence.
Plan: Uses the formula:
f() = ( 16807 * seed ) mod 2147483647.
The value of "seed" must be within [1, ..., 2147483646].
Notes: None.
**/
int pmrandom()
{
int tmp = seed;
setseed(seed);
return(tmp);
}
/***********************************************************************
getseed()
Returns: int
Purpose: Get the current value of the seed.
Notes: None.
**/
int getseed()
{
return (seed);
}